CHESTNUT CODE IS POETRY

生成模型:1. 生成模型建模

基于似然的生成模型

基于似然的生成模型包括:VAE、自回归模型、流模型等,不包括GAN。

到底什么是生成模型?以图片为例子,如果我们知道所有真实图片的分布$p(x)$,那我们从这个分布中采样一个样本,就可以得到真实的图片,这就是“生成”。

因此,生成模型的目标就是学习到这个分布$p(x)$,这个也称为“证据”。因此目标函数也就是:

$$ max \sum_{x\in D} \log p(x) $$

其中$D$代表训练数据集。

变分自编码器

基于ELBO(证据下界)的推导

由于证据$p(x)$计算是不可能的,我们将$p(x)$改写成:

$$ p(x) = \int p(x|z) p(z) dz $$

我们分析一下上式是否可以计算:这里涉及两个分布,一个是(解码器)似然分布$p(x|z)$,一个是先验分布$p(z)$。假如我们要最大化目标:

$$ \sum_{x\in D} \log p(x) = \sum_{x\in D} log \int p(x|z) p(z) dz $$

需要我们对所有训练集数据$x$,并且对所有的$z$积分,这是不可能的。因此我们要想办法能不能变成可采样的形式,用蒙特卡洛估计去优化。我们接着改写$p(x)$:

$$ log p(x) = log \int p(x|z) p(z) dz = log \int p(x|z) p(z) \frac{q(z|x)}{q(z|x)} dz \\ = \underbrace{log \mathbb{E}_{z\sim q(z|x)} [\frac{p(x|z) p(z)}{q(z|x)}] \geq \mathbb{E}_{z\sim q(z|x)}[logp(x|z) + logp(z) - logq(z|x)]}_{\text{ Jensen 不等式}} \\ = \mathbb{E}_{z\sim q(z|x)}[logp(x|z)] - \mathbb{E}_{z\sim q(z|x)}[log\frac{q(z|x)}{p(z)}] \\ = \mathbb{E}_{z\sim q(z|x)}[logp(x|z)] - D_{KL}(q(z|x) || p(z)) = ELBO $$

Jensen 不等式见这里

这里我们用$q(z|x)$去近似真实后验$p(z|x)$(因为真实后验无法被计算)。所以最终的目标就是最大化$ELBO$,即:

$$ max_\theta \sum_{x\in D} \mathbb{E}_{z\sim q(z|x)}[logp(x|z)] - D_{KL}(q(z|x) || p(z)) \\ \approx max_\theta \mathbb{E}_{x\sim p(x)}[\mathbb{E}_{z\sim q(z|x)}[logp(x|z)] - D_{KL}(q(z|x) || p(z))] $$

变分的由来:变分法是在泛函中,寻找一个函数$q(x)$,使得泛函$L(q(x))$最大或者最小。泛函可以理解为函数的函数。那VAE其实在做的就是找一个最优的近似后验$q(z|x)$,使得$ELBO$最小。

基于联合概率分布的推导

我们将$p(z)$写成:

$$ p(z) = \int p(z, x) dz \\ $$

那么最小化$KL(p(x)||p_\theta(x))$,其实可以通过最小化$KL(p(z,x)||p_\theta(z,x))$来实现。因此优化目标转为:

$$ min \quad KL(p(z, x) || p_\theta(z, x)) $$

我们改写一下:

$$ KL(p(z, x) || p_\theta(z, x)) = \int\int p(z, x) log \frac{p(z, x)}{p_\theta(z, x)} dz dx \\ = \int\int p(x) p(z|x) log \frac{p(z, x)}{p_\theta(z, x)} dz dx \\ = \mathbb{E}_{x\sim p(x)} [\mathbb{E}_{z\sim p(z|x)} [log \frac{p(z, x)}{p_\theta(z, x)}]] \\ = \mathbb{E}_{x\sim p(x)} [\mathbb{E}_{z\sim p(z|x)} [log \frac{p(z|x)}{p(z)} - log p_\theta(x|z) + log p(x)]] \\ = \mathbb{E}_{x\sim p(x)} [KL(p(z|x) || p(z)) ] - \mathbb{E}_{x\sim p(x)} [\mathbb{E}_{z\sim p(z|x)} [log p_\theta(x|z)]] + \underbrace{\mathbb{E}_{x\sim p(x)}[log p(x)]}_{\text{常数}} \\ $$

所以优化目标转为:

$$ min_\theta\quad \mathbb{E}_{x\sim p(x)} [KL(p(z|x) || p(z)) ] - \mathbb{E}_{x\sim p(x)} [\mathbb{E}_{z\sim p(z|x)} [log p_\theta(x|z)]] $$

我们来分析一下这个目标函数:

第一部分,我们从真实分布$p(x)$中采样样本$x$,计算条件概率$p(z|x)$的分布,与先验分布$p(z)$的分布进行比较,计算 KL 散度。

第二部分,我们从真实分布$p(x)$中采样样本$x$,计算条件概率$p(z|x)$的分布,并且从$p(z|x)$中采样$z$,通过$p_\theta(x|z)$得到似然概率。

根据目标,我们希望最小化后验分布和先验分布的 KL 散度,同时最大化似然概率。

但是优化目标的计算仍然存在问题:$p(z|x)$分布未知,无法直接计算。而VAE为了解决这个问题,假设$p(z|x)$$p(z)$都是正态分布,并且使用可学习的分布$q(z|x)=p_\Theta(z|x)$近似$p(z|x)$。至此,优化目标可以数值求得。

Return to Blog